<?php
App::uses('Tools', 'Lib');
class Chamado extends AppModel{
	public $useTable = 'tab_chamado';
    
	public $validate = array(
            'id_situacao_chamado' => array(
                'alphaNumeric' => array(
                    'rule'    => array('comparison', "not equal", 5),
                    'message'  => 'O Chamado já esta encerrado, não é possivel fazer alterações.',
                )
            ),
            //validação email da abertura de chamado
            'email' => array(
                    'email',
                    'required' => true,
                    'message' => 'Insira um email válido!',
            ),
    );

    public function todos(){

    }

	public function buscaChamdoPorId($id_chamado){
		$chamado = $this->find('first', array('conditions' => array('Chamado.id' => $id_chamado)));
		return $chamado;
	}

	public function buscaChamdosPorTecnico($id_tecnico){
		return $this->find('all', 
                array(
                    'conditions' => array('Chamado.id_dados_tecnico' => $id_tecnico),
                    'order' => array('Chamado.data_abertura desc')
                    )
            );
	}
    public function buscaChamdosNaoEncerradosPorTecnico($id_tecnico){
        return $this->find('all', array(
                'conditions' => array(
                    'Chamado.id_dados_tecnico' => $id_tecnico,
                    'Chamado.id_situacao_chamado !=' => 5
                ),
                'order' => array('Chamado.data_abertura desc')
            )
        );
    }
    public function preencheTelaTodos($id_tecnico){
        return $this->find('all', 
            array(
                'conditions' => array(
                    'Chamado.id_dados_tecnico' => $id_tecnico, 
                    'Chamado.id_situacao_chamado !=' => 5
                ),
                'order' => array('Chamado.data_abertura desc')
            )
        );
    }

	public function buscaChamadosPorPessoa($id_pessoa){
		return $this->find('all', array('conditions' => array('Chamado.id_pessoa' => $id_pessoa)));
	}

    public function buscaChamadosEncerrados(){
        return $this->find('all', array('conditions' => array('Chamado.id_situacao_chamado' => 5)));
    }

    public function buscaTodasInteracoesPorChamado(){

        $result = $this->query("
            select distinct 
                Chamado.id, 
                Chamado.descricao_chamado, 
                Solicitante.nome as nome_solicitante, 
                DadosTecnico.nome as nome_responsavel,
                Chamado.data_vencimento
            from tab_chamado Chamado
                join tab_interacoes Interacoes
                    on Interacoes.id_chamado = Chamado.id and Interacoes.data_envio_notificacao is null
                join tab_pessoa Solicitante
                    on Solicitante.id = Chamado.id_pessoa
                join tab_pessoa DadosTecnico
                    on DadosTecnico.id = Chamado.id_dados_tecnico
        ");

        return $result;
    }

    public function indicadores($data_inicio = null, $data_fim = null){

    if(is_null($data_inicio) || is_null($data_fim)){
        $data_inicio = date('Y-m-01');
        $data_fim = date('Y-m-t');
        //$data_inicio = '2010-04-02';
        //$data_fim = '2026-04-29';
    }

        $this->hasMany = array(
            'Unidade' => array(
                'className' => 'Unidade',
            ),
            'Area' => array(
                'className' => 'Area',
            ),
            'Grupo' => array(
                'className' => 'Grupo',
            ),
            'SubGrupo' => array(
                'className' => 'SubGrupo',
            ),
            'Pessoa' => array(
                'className' => 'Pessoa',
            )
        );

        $indicadores = array();

        $chamados = $this->find("count",
            array('conditions' => array('Chamado.data_abertura >=' => $data_inicio, 'Chamado.data_atendimento <=' => $data_fim))
        );

        /**
         * Buscar os chamados que foram antendidos fora do prazo
         */
        $indicadores['fora_prazo'] = $this->find("count",
            array(
                'conditions' => array(
                    'Chamado.data_abertura >=' => $data_inicio,
                    'Chamado.data_atendimento <=' => $data_fim,
                    'Chamado.data_atendimento > Chamado.data_vencimento'
                )
            )
        );
        /**
         * Buscar os chamados que foram antendidos dentro do prazo
         */
        $indicadores['dentro_prazo'] = $this->find("count",
            array(
                'conditions' => array(
                    'Chamado.data_abertura >=' => $data_inicio,
                    'Chamado.data_atendimento <=' => $data_fim,
                    'Chamado.data_atendimento < Chamado.data_vencimento'
                )
            )
        );

        $unidades = $this->Unidade->listaUnidades();
        /** @var $i equivade ao id_unidade */
        foreach($unidades as $i => $unidade){
            $count = $this->find("count", 
                array("conditions" => array(
                        "Chamado.id_unidade =" => $i,
                        'Chamado.data_abertura >=' => $data_inicio,
                        'Chamado.data_atendimento <=' => $data_fim,
                    )
                )
            );
            if($count > 0){
                $indicadores['inidicador_unidade'][$i]['total'] = $count;
                $busca_unidades = $this->Unidade->find("first",
                    array("conditions" => array("Unidade.id =" => $i)));
                $indicadores['inidicador_unidade'][$i]['Unidade'] = $busca_unidades['Unidade'];
            }
        }

        $areas = $this->Area->listaAreas();
         /** @var $i equivade ao id_area */
        foreach ($areas as $i => $area) {
            $count = $this->find("count",
                array("conditions" =>
                    array(
                        "Chamado.id_area =" => $i,
                        'Chamado.data_abertura >=' => $data_inicio,
                        'Chamado.data_atendimento <=' => $data_fim,
                    )
                )
            );
            if($count > 0){
                $indicadores['inidicador_area'][$i]['total'] = $count;
                $busca_areas = $this->Area->find("first",
                    array("conditions" => array("Area.id =" => $i)));
                $indicadores['inidicador_area'][$i]['Area'] = $busca_areas['Area'];
            }
        }

        $grupos = $this->Grupo->listagrupo();
         /** @var $i equivade ao id_grupo */
        foreach($grupos as $i => $grupo){
            $count = $this->find("count",
                array("conditions" =>
                    array(
                        "Chamado.id_grupo =" => $i,
                        'Chamado.data_abertura >=' => $data_inicio,
                        'Chamado.data_atendimento <=' => $data_fim,
                    )
                )
            );

            if($count > 0){
                $indicadores['inidicador_grupo'][$i]['total'] = $count;
                $busca_grupos = $this->Grupo->find("first",
                    array("conditions" => array("Grupo.id =" => $i)));

                $indicadores['inidicador_grupo'][$i]['Grupo'] = $busca_grupos['Grupo'];

                $media = $this->find('first',
                    array(
                        "conditions" => array("Chamado.id_grupo =" => $i),
                        'fields' => array(
                            "FORMAT(AVG(Chamado.hora_realizada), '#.#0') AS media"
                        )
                    )
                );
                $indicadores['inidicador_grupo'][$i]['media'] = $media[0]['media'];
            }
        }


        $sub_grupos = $this->SubGrupo->listaSubGrupo();
         /** @var $i equivade ao id_grupo */
        foreach($sub_grupos as $i => $sub_grupo){
            $count = $this->find("count",
                array("conditions" =>
                    array(
                        "Chamado.id_sub_grupo" => $i,
                        'Chamado.data_abertura >=' => $data_inicio,
                        'Chamado.data_atendimento <=' => $data_fim,
                    )
                )
            );

            if($count > 0){
                $indicadores['inidicador_sub_grupo'][$i]['total'] = $count;
                $busca_sub_grupos = $this->SubGrupo->find("first",
                    array("conditions" => array("SubGrupo.id =" => $i)));
                $indicadores['inidicador_sub_grupo'][$i]['SubGrupo'] = $busca_sub_grupos['SubGrupo'];

                $media = $this->find('first',
                    array(
                        "conditions" => array("Chamado.id_sub_grupo =" => $i),
                        'fields' => array(
                            "FORMAT(AVG(Chamado.hora_realizada), '#.#0') AS media"
                        )
                    )
                );
                $indicadores['inidicador_sub_grupo'][$i]['media'] = $media[0]['media'];
            }
        }

        $pessoas = $this->Pessoa->listaPessoas();

        foreach ($pessoas as $i => $pessoa) {
            $count = $this->find("count",
                array("conditions" =>
                    array(
                        "Chamado.id_pessoa =" => $i,
                        'Chamado.data_abertura >=' => $data_inicio,
                        'Chamado.data_atendimento <=' => $data_fim,
                    )
                )
            );

            if($count > 0){
                $indicadores['Solicitante'][$i]['total'] = $count;

                $busca_pessoas = $this->Pessoa->find("first",
                    array("conditions" => array("Pessoa.id =" => $i)));
                $indicadores['Solicitante'][$i]['Pessoa'] = $busca_pessoas['Pessoa'];
            }

        }
        //print_r($indicadores);exit;
        return $indicadores;
    }


}
?>